// 获取用户可访问的路由
export function getAccessedRouters(asyncRouterMap, menus) {
    const accessedRouters = asyncRouterMap.filter(v => {
        if (hasPermission(menus, v)) {
            if (v.children && v.children.length > 0) {
                v.children = v.children.filter(child => {
                    if (hasPermission(menus, child)) {
                        return child;
                    }
                    return false;
                });
                return v;
            } else {
                return v;
            } 
        }
        return false;
    })
    // 排序
    sortRouters(accessedRouters);
    localStorage.setItem('userMenus', JSON.stringify(accessedRouters));
    return accessedRouters; 
}

function hasPermission(menus, route) {
    if (route.name) {
        let currMenu = getMenu(route.name, menus);
        if (currMenu != null) {
            // 设置菜单的标题 图标和可见性
            if (currMenu.title != null && currMenu.title !== '') {
                route.meta.title = currMenu.title;
            }
            if (currMenu.icon != null && currMenu.title !== '') {
                route.meta.icon = currMenu.icon;
            }
            if(currMenu.hidden!=null){
                route.hidden = currMenu.hidden !== 0;
            }
            if (currMenu.sort != null && currMenu.sort !== '') {
                route.sort = currMenu.sort;
            }
            return true;
        } else {
            route.sort = 0;
            if (route.hidden !== undefined && route.hidden === true) {
                route.sort=-1;
                return true;
            } else {
                return false;
            }
        }
    } else {
        return true;
    }
}


function getMenu(name, menus) {
    for (let i = 0; i < menus.length; i++) {
        let menu = menus[i];
        if (name === menu.name) {
            return menu;
        }
    }
    return null;
}

//对菜单进行排序
function sortRouters(accessedRouters) {
    for (let i = 0; i < accessedRouters.length; i++) {
        let router = accessedRouters[i];
        if(router.children && router.children.length > 0){
        router.children.sort(compare("sort"));
        }
    }
    accessedRouters.sort(compare("sort"));
}

//降序比较函数
function compare(p){
    return function(m,n){
        let a = m[p];
        let b = n[p];
        return b - a;
    }
}